/*
 * Created on 07/10/2009
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package model;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.apache.myfaces.custom.navmenu.NavigationMenuItem;

import com.stefanini.pe.bbva.mbl.carga.in.to.OpcionesMenu;
import com.stefanini.pe.framework.collections.DataRow;
import com.stefanini.pe.framework.collections.DataTable;
import com.stefanini.pe.framework.collections.StringCollection;
import com.stefanini.pe.framework.common.Convert;

/**
 * @author jlezama
 * 
 * 
 */
public class DynamicMenu {
	/* ****************************************/
	/* Menu Dinamico */
	/* ***************************************/
	private ArrayList m_MenuPrincipal = new ArrayList();

	private NavigationMenuItem[] navItems;

	private String m_IPUsuario;

	public DynamicMenu() {
		System.out.println("New dynamicMenu");
	}

	public NavigationMenuItem[] getNavItems() {
		m_IPUsuario = "";
		//PintarMenuDemo();		
		m_MenuPrincipal.trimToSize();
		Iterator it = m_MenuPrincipal.iterator();
		int i = 0;
		navItems = new NavigationMenuItem[m_MenuPrincipal.size()];
		while(it.hasNext())
		{
			navItems[i] = (NavigationMenuItem)it.next();
			i++;
		}
		return navItems;
	}

	public void setNavItems(NavigationMenuItem[] navItems) {
		this.navItems = navItems;
	}

	public StringCollection RetornarColumnas() {
		StringCollection strCol = new StringCollection();
		strCol.add("ID");
		strCol.add("NombreOpcion");
		strCol.add("IDPadre");
		strCol.add("Url");
		strCol.add("Visible");
		return strCol;
	}
	
	public void PintarMenuDemo()
	{
		DataTable dt = new DataTable();
		DataRow row;
		try{		
			dt.getColumns().add("ID");
			dt.getColumns().add("NombreOpcion");
			dt.getColumns().add("IDPadre");
			dt.getColumns().add("Url");
			dt.getColumns().add("Visible");
			
			row = dt.NewRow();
			row.set("ID","Mantenimientos");
			row.set("NombreOpcion","Mantenimientos");
			row.set("IDPadre","0");
			row.set("Url","");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","FamiliaProducto");
			row.set("NombreOpcion","Familia Producto");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goFamiliaProducto()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","Gestor");
			row.set("NombreOpcion","Gestor");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goGestor()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","GrupoEconomico");
			row.set("NombreOpcion","Grupo Economico");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goGrupoEconomico()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","Moneda");
			row.set("NombreOpcion","Moneda");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goMoneda()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","Oficina");
			row.set("NombreOpcion","Oficina");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goOficina()");
			row.set("Visible","1");
			dt.getRows().add(row);

			row = dt.NewRow();
			row.set("ID","Producto");
			row.set("NombreOpcion","Producto");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goProducto()");
			row.set("Visible","1");
			dt.getRows().add(row);
						
			row = dt.NewRow();
			row.set("ID","SubProducto");
			row.set("NombreOpcion","SubProducto");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goSubProducto()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","Territorio");
			row.set("NombreOpcion","Territorio");
			row.set("IDPadre","Mantenimientos");
			row.set("Url","goTerritorio()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			/*Consulta Posicion*/
			row = dt.NewRow();
			row.set("ID","Consultas");
			row.set("NombreOpcion","Consultas");
			row.set("IDPadre","0");
			row.set("Url","");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			row = dt.NewRow();
			row.set("ID","Buscador de Clientes");
			row.set("NombreOpcion","Buscador de Clientes");
			row.set("IDPadre","Consultas");
			row.set("Url","goBuscadorClientes()");
			row.set("Visible","1");
			dt.getRows().add(row);
			
			m_MenuPrincipal.clear();
			CargaMenu(dt);	
		
		}
		catch(Exception ex)
		{
			System.out.println(ex.getMessage());
		}
	
	}	
	
	public void CargaMenu(List lst) throws Exception{
		
		DataTable dt = new DataTable();
		dt.getColumns().add("ID");
		dt.getColumns().add("NombreOpcion");
		dt.getColumns().add("IDPadre");
		dt.getColumns().add("Url");
		dt.getColumns().add("Visible");
		
		for(Iterator it = lst.iterator();it.hasNext();)
		{	DataRow row = dt.NewRow();
		    OpcionesMenu menu = (OpcionesMenu)it.next();
			row.set("ID",menu.getCodOpcion());
			row.set("NombreOpcion",menu.getDesOpcion());
			row.set("IDPadre",menu.getCodOpcionSup());
			row.set("Url",menu.getUrlOpcion());
			row.set("Visible","1");
			dt.getRows().add(row);
		}
		CargaMenu(dt);		
	}
	
	/*public void CargaMenu(Vector oVector) throws Exception{
		
		DataTable dt = new DataTable();
		dt.getColumns().add("ID");
		dt.getColumns().add("NombreOpcion");
		dt.getColumns().add("IDPadre");
		dt.getColumns().add("Url");
		dt.getColumns().add("Visible");
		
		for(Iterator it = oVector.iterator();it.hasNext();)
		{	DataRow row = dt.NewRow();
		    OpcionesMenu menu = (OpcionesMenu)it.next();
			row.set("ID",menu.getCodOpcion());
			row.set("NombreOpcion",menu.getDesOpcion());
			row.set("IDPadre",menu.getCodOpcionSup());
			row.set("Url",menu.getUrlOpcion());
			row.set("Visible","1");
			dt.getRows().add(row);
		}
		CargaMenu(dt);		
	}*/

	/*public void CargaMenu(DataTable dt) {
		m_MenuPrincipal.clear();
		NavigationMenuItem oItem;
		for (int x = 0; x < dt.getRows().count(); x++) {
			oItem = new NavigationMenuItem(dt.getRows().get(x).get("NombreOpcion"),
					   					   "", 
										   "/Image/Iconos/Next.gif", 
										   false);
			if (Convert.toString(dt.getRows().get(x).get("IDPadre")).compareTo("0") == 0) {
				if (Convert.toString(dt.getRows().get(x).get("Visible")).compareTo("1") == 0) {
					
					this.m_MenuPrincipal.add(oItem);
					CargaHijos(dt.getRows().get(x).get("ID"),oItem, dt);
				}
			}
		}
	
	}

	public void CargaHijos(String strIDPadre,NavigationMenuItem mnuMenuItem, DataTable dtMenuItems) {
		ArrayList lstMenuHijos = new ArrayList();
		NavigationMenuItem[] navSubItems=null;
		
		for (Iterator it = dtMenuItems.getRows().iterator(); it.hasNext();) {
			DataRow drMenuItem = (DataRow) it.next();
			
			if ((drMenuItem.get("IDPadre").equals(strIDPadre)==true) && 
				(drMenuItem.get("ID").equals(drMenuItem.get("IDPadre"))==false)) {
				NavigationMenuItem mnuNewMenuItem = new NavigationMenuItem(drMenuItem.get("NombreOpcion"),
																		   "javascript:"+drMenuItem.get("Url")+";", 
																		   "/Image/Iconos/Next.gif", 
																		   false);				
				lstMenuHijos.add(mnuNewMenuItem);				
			}
		}
		
		lstMenuHijos.trimToSize();
		
		if(lstMenuHijos.size()>0)
		{	int i=0;
			navSubItems = new NavigationMenuItem[lstMenuHijos.size()];
			for(Iterator it = lstMenuHijos.iterator();it.hasNext();)
			{ 
				navSubItems[i] = (NavigationMenuItem)it.next();
				i++;
			}
			mnuMenuItem.setNavigationMenuItems(navSubItems);
		}
	}
	
	*/
	
	public void CargaMenu(DataTable dt){
		m_MenuPrincipal.clear();
		NavigationMenuItem oItem;
		Vector menuConfigurado=new Vector();
		for (int x = 0; x < dt.getRows().count(); x++) {
			DataRow dataRow=dt.getRows().get(x);
			oItem = new NavigationMenuItem(dataRow.get("NombreOpcion"),
					   "", 
					   "/Image/Iconos/Next.gif", 
					   false);
			if (Convert.toString(dataRow.get("IDPadre")).compareTo("0") == 0) {
				if (Convert.toString(dataRow.get("Visible")).compareTo("1") == 0) {
					this.m_MenuPrincipal.add(oItem);
					ArrayList lstMenuHijos=new ArrayList();
					adicionaHijos(dataRow,oItem, dt, lstMenuHijos);
			}
			}
		}
	}
	
	public void adicionaHijos(DataRow dataRow,NavigationMenuItem mnuMenuItem, DataTable dtMenuItems,ArrayList lstMenuHijos){
		int contador_hijos=0;
		NavigationMenuItem[] navSubItems=null;
		for (Iterator it = dtMenuItems.getRows().iterator(); it.hasNext();) {
			DataRow drMenuItem = (DataRow) it.next();
			
			if ((dataRow.get("ID").equals(drMenuItem.get("IDPadre")))){
				NavigationMenuItem mnuNewMenuItem = new NavigationMenuItem(drMenuItem.get("NombreOpcion"),
																		   "javascript:"+drMenuItem.get("Url")+";", 
																		   "/Image/Iconos/Next.gif", 
																		   false);
				mnuMenuItem.add(mnuNewMenuItem);
				adicionaHijos(drMenuItem,mnuNewMenuItem,dtMenuItems,lstMenuHijos);
			}
		}
	}
	
	
	public static void main(String args[])
	{	DynamicMenu oDynamicMenu = new DynamicMenu();
		NavigationMenuItem[] items= oDynamicMenu.getNavItems();
		
		for(int i=0;i<items.length;i++)
		{ 
			System.out.println(items[i].getValue());
			System.out.println(items[i].getAction());
			System.out.println(items[i].getIcon());
			for(int j=0;j<items[i].getNavigationMenuItems().length;j++)
			{
				System.out.println(items[i].getNavigationMenuItems()[j].getValue());
				System.out.println(items[i].getNavigationMenuItems()[j].getAction());
				System.out.println(items[i].getNavigationMenuItems()[j].getIcon());
			}			
		}
	}

}
